package leetcode每日一题;


import java.util.ArrayList;
import java.util.List;

/**
 * 1. 问题描述
 * 给定由若干0和1组成的数组 A。我们定义N_i：从A[0] 到A[i]的第 i个子数组被解释为一个二进制数（从最高有效位到最低有效位）。
 * 返回布尔值列表answer，只有当N_i可以被5整除时，答案answer[i]为true，否则为 false。
 *
 * 2. 算法分析
 *  此题比较简单，但是有一个特别之处就是会出现整数溢出，所以我们为了防止溢出，只需要求出个位数字即可 (%10)
 *  N[i] = (2 * N[i-1] + A[i]) % 10 非常明显的规律
 *
 *
 * 3，代码实现
 */
@SuppressWarnings("all")
public class 可被5整除的二进制前缀 {
    public static void main(String[] args) {
        String s = "    ";
        char c = ' ';
        System.out.println(s.length());
        String[] s1 = s.split(" ");
        System.out.println(s1.length);
    }

    
    public static List<Boolean> prefixesDivBy5(int[] A) {
        List<Boolean> res = new ArrayList<>();
        int len = A.length;
        if(len == 0) {
            return res;
        }
        int temp = 0;
        for(int i = 0; i < len; i++) {
            temp = (2 * temp + A[i]) % 10; // 求出个位
            if(temp % 5 == 0) {
                res.add(true);
            } else {
                res.add(false);
            }
        }
        return res;
    }

}
